package DAO;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import jdbc.Connexion;
import businessEntities.Actif;
import businessEntities.Cours;
import businessEntities.DateCours;

public class DaoActif {
	public static Actif getActif(String isin, Date debut, Date fin){
		//QS0010040911
		Actif actif = null;
		
		String sql = "SELECT actif.isin, actif.intitule FROM actif";
		if(debut!=null || fin!=null)
			sql+=", cours ";
		sql+=" WHERE actif.ISIN='"+isin+"' ";  
		if(debut!=null || fin!=null)
			sql+="AND actif.isin = cours.isin ";
		if(debut!=null)
		//sql+="AND to_date(cours.datecours,'DD/MM/YY') >= to_date('"+DateCours.getDate(debut, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') ";
		sql+=" AND to_date(datecours,'DD/MM/YY') between to_date('"+DateCours.getDate(debut, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') and sysdate ";
		if(fin!=null)
		sql+="AND to_date(cours.datecours,'DD/MM/YY') <= to_date('"+DateCours.getDate(fin, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') "; 
		
		try{
			Object[] oActif = Connexion.executeSql(sql,2).get(0);
			actif = new Actif();
			actif.setISin(oActif[0]+"");
			actif.setIntituleActif(oActif[1]+"");
			actif.setDateDebut(getDateMin(actif,debut));
			actif.setDateFin(getDateMax(actif,fin));
			actif.setCours(DaoCours.getCours(isin,actif.getDateDebut(),actif.getDateFin()));
		}catch (Exception e) {}
		
		return actif;
	}

	public static ArrayList<Actif> getActif(){
		//QS0010040911
		ArrayList<Actif> actif = null;
		
		String sql = "SELECT actif.isin, actif.intitule FROM actif";
		try{
			List<Object[]> oActif = Connexion.executeSql(sql,2);
			actif = new ArrayList<Actif>();
			Actif actif0;
			
			for(int i=0; i<oActif.size(); i++){
				
				actif0 = new Actif(oActif.get(i)[0]+"", oActif.get(i)[1]+"");
				actif.add(actif0);
			}

		}catch (Exception e) {}
		
		return actif;
	}
	
	public static Date getDateMin(Actif actif, Date debut) {
		Date d = null;
		String sql = "SELECT min(datecours) FROM cours WHERE ISIN='"+actif.getISin()+"' ";
		if(debut!=null)
			//sql+="AND to_date(cours.datecours,'DD/MM/YY') >= to_date('"+DateCours.getDate(debut, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') ";
			sql+=" AND to_date(datecours,'DD/MM/YY') between to_date('"+DateCours.getDate(debut, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') and sysdate ";
		try{
			Object[] oDate = Connexion.executeSql(sql,1).get(0);
			d=DateCours.getDate(oDate[0]+"", DateCours.FORMAT_YYYYY_MM_DD_TIRE);
		}catch (Exception e) {}
		return d;
	}
	
	public static Date getDateMax(Actif actif, Date fin) {
		Date d = null;
		String sql = "SELECT max(datecours) FROM cours WHERE ISIN='"+actif.getISin()+"' ";
		if(fin!=null)
			sql+="AND to_date(cours.datecours,'DD/MM/YY') <= to_date('"+DateCours.getDate(fin, DateCours.FORMAT_DD_MM_YYYY)+"','DD/MM/YYYY') ";
		try{
			Object[] oDate = Connexion.executeSql(sql,1).get(0);
			d=DateCours.getDate(oDate[0]+"", DateCours.FORMAT_YYYYY_MM_DD_TIRE);
		}catch (Exception e) {}
		
		return d;
	}
}
